package start.spring.basic.flowable.service.process;

import java.util.List;
import java.util.Map;

import start.spring.basic.flowable.entity.WfDeployForm;
import start.spring.basic.flowable.service.IBaseService;
import start.spring.basic.flowable.vo.flowable.FormConf;
import start.spring.basic.flowable.vo.flowable.ProcessQuery;
import start.spring.basic.flowable.vo.flowable.WfDefinitionVo;
import start.spring.basic.flowable.vo.flowable.WfDetailVo;
import start.spring.basic.flowable.vo.flowable.WfTaskVo;
import start.spring.basic.page.PageQuery;
import start.spring.basic.page.PageResult;
import start.spring.basic.response.ResponseData;

/**
 * @author KonBAI
 * @createTime 2022/3/24 18:57
 */
public interface IWfProcessService extends IBaseService {

    /**
     * 查询可发起流程列表
     * @param pageQuery 分页参数
     * @return
     */
	PageResult<WfDefinitionVo> selectPageStartProcessList(PageQuery pageQuery, ProcessQuery processQuery);

    /**
     * 查询可发起流程列表
     */
    List<WfDefinitionVo> selectStartProcessList(ProcessQuery processQuery);

    /**
     * 查询我的流程列表
     * @param pageQuery 分页参数
     */
    PageResult<WfTaskVo> selectPageOwnProcessList(ProcessQuery processQuery, PageQuery pageQuery);

    /**
     * 查询我的流程列表
     */
    List<WfTaskVo> selectOwnProcessList(ProcessQuery processQuery);

    /**
     * 查询代办任务列表
     * @param pageQuery 分页参数
     */
    PageResult<WfTaskVo> selectPageTodoProcessList(ProcessQuery processQuery, PageQuery pageQuery);

    /**
     * 查询代办任务列表
     */
    List<WfTaskVo> selectTodoProcessList(ProcessQuery processQuery);

    /**
     * 查询待签任务列表
     * @param pageQuery 分页参数
     */
    PageResult<WfTaskVo> selectPageClaimProcessList(ProcessQuery processQuery, PageQuery pageQuery);

    /**
     * 查询待签任务列表
     */
    List<WfTaskVo> selectClaimProcessList(ProcessQuery processQuery);

    /**
     * 查询已办任务列表
     * @param pageQuery 分页参数
     */
    PageResult<WfTaskVo> selectPageFinishedProcessList(ProcessQuery processQuery, PageQuery pageQuery);

    /**
     * 查询已办任务列表
     */
    List<WfTaskVo> selectFinishedProcessList(ProcessQuery processQuery);

    /**
     * 查询流程部署关联表单信息
     * @param definitionId 流程定义ID
     * @param deployId 部署ID
     */
    FormConf selectFormContent(String definitionId, String deployId, String procInsId);

    /**
     * 查询部署的外部表单
     *	
     * @param definitionId 流程定义ID
     * @param deployId 部署ID
     * @return
     * @since           1.0
     */
    WfDeployForm selectDeployExternalForm(String definitionId, String deployId);
    
    /**
     * 启动流程实例
     * @param procDefId 流程定义ID
     * @param variables 扩展参数
     */
    void startProcessByDefId(String procDefId, Map<String, Object> variables);
    
    /**
     * 启动流程实例
     * 
     * @param procDefId 流程定义ID
     * @param businessKey 业务唯一标志
     * @param variables 流程变量
     * 
     */
    String startProcessInstance(String procDefId, String businessKey, Map<String, Object> variables);

    /**
     * 通过DefinitionKey启动流程
     * @param procDefKey 流程定义Key
     * @param variables 扩展参数
     */
    void startProcessByDefKey(String procDefKey, Map<String, Object> variables);

    /**
     * 删除流程实例
     */
    void deleteProcessByIds(List<String> instanceIds);


    /**
     * 读取xml文件
     * @param processDefId 流程定义ID
     */
    String queryBpmnXmlById(String processDefId);


    /**
     * 查询流程任务详情信息
     * @param procInsId 流程实例ID
     * @param taskId 任务ID
     * @param businessKey 业务表记录主键
     */
    ResponseData<WfDetailVo> queryProcessDetail(String procInsId, String taskId, String businessKey);

	
}
